手工运维删除环境

AppStack 提供环境删除能力,但实际应用中还会存在希望手工进行环境资源清理的场景,可以参考如下操作步骤。

非工作负载类型资源删除

手工运维进行环境删除时,非工作负载类资源(如:ServiceIngressConfigMapSecretPersistentVolumeClaim等),可以直接使用 kubectl 命令或其他方式删除。

如,执行以下命令删除一个.metadata.name值为service-demo的Service资源。更多 kubectl 命令参见

kubectl delete service service-demo

工作负载类型资源删除

AppStack 提供基于 开放应用模型 Open Application Model (OAM) 的部署增强能力,使用OAM部署的工作负载类资源会被集群中的OAM runtime纳管(如:Deployment),直接删除一段时间后会被重建。手工删除需要参考下面的操作步骤。

说明:以下示例使用 kubectl 并假设可以从本地开发机连接到集群;假定待删除的工作负载的 .metadata.name值为 deploy-demo,所在的命令空间名字为 namespace-demo

1. 确认工作负载

执行以下命令查看待删除的工作负载。

kubectl get application deploy-demo -n namespace-demo
kubectl get componentdefinition deploy-demo -n namespace-demo

2. 确认定位标签

若第1步中查找的编排对象和组件定义都存在,执行以下命令查看编排对象。

kubectl get application deploy-demo -n namespace-demo -o=yaml

编排对象形如:

metadata:
  name: "deploy-demo"
  namespace: "namespace-demo"
  annotations:
    app.oam.dev/rollout-template: "true"
    app.oam.dev/rolling-components: "deploy-demo"
    appstack.aliyun.com/change-made-by: "1f061dfd-d612-4628-914f-14b4c207fe5f"
  labels:
    appstack/appconfig-selector: "deploy-demo"
    appstack/current-revision: "deploy-demo-v1"
    devops.aliyun.com/app-name: "app1028836"
    devops.aliyun.com/env-name: "production"
    devops.aliyun.com/org-id: "5ebbc0******************"
apiVersion: "core.oam.dev/v1beta1"
kind: "Application"
spec:
  components:
  - name: "deploy-demo"
    type: "deploy-demo"
    properties: {}
    traits: []

找到编排对象中如下三个标签,它们分别对应 应用名称环境名称云效企业ID

devops.aliyun.com/app-name: "app1028836"
devops.aliyun.com/env-name: "production"
devops.aliyun.com/org-id: "5ebbc0******************"

3. 使用标签清理发布执行辅助对象

使用第2步中记录下 应用名称环境名称云效企业ID 的标签,执行以下命令进行发布执行辅助对象(approllout)的删除。

kubectl delete approllout -l devops.aliyun.com/app-name=app1028836,devops.aliyun.com/env-name=production,devops.aliyun.com/org-id=5ebbc0****************** -n namespace-demo

执行以下命令确认辅助对象是否删除完成,当kubectl输出查不到结果的信息时,表明删除完成。

kubectl get approllout -l devops.aliyun.com/app-name=app1028836,devops.aliyun.com/env-name=production,devops.aliyun.com/org-id=5ebbc0****************** -n namespace-demo

4. 清理OAM工作负载托管对象

执行以下命令清理OAM工作负载托管对象。

kubectl delete application deploy-demo -n namespace-demo

执行以下命令确认工作负载托管对象是否删除完成,当kubectl输出查不到结果的信息时,表明删除完成。

kubectl get application deploy-demo -n namespace-demo

如果希望确认deployment删除进度,可以执行以下命令,当kubectl输出查不到结果的信息时,表明deployment的级联清理已经完成。

kubectl delete componentdefinition deploy-demo -n namespace-demo

5. 清理组件定义元数据

执行以下命令删除组件定义元数据。

kubectl delete componentdefinition deploy-demo -n namespace-demo

执行以下命令确认组件定义元数据是否删除完成,当kubectl输出查不到结果的信息时,表明删除完成。

kubectl get componentdefinition deploy-demo -n namespace-demo

至此,工作负载类型的资源清理完毕。